Interroger des DataFrames
Un filtre est une Series booléenne alignée sur l'index.
import pandas as pd
orders = pd.DataFrame({
"customer_id": ["C1", "C2", None],
"amount": [120, 80, 200],
"status": ["paid", "shipped", "pending"],
"created_at": pd.to_datetime(["2026-01-02", "2026-03-31 12:00", "2026-04-01"], format="mixed"),
})
mask = orders["amount"].ge(100) & orders["status"].isin(["paid", "shipped"])
large_orders = orders.loc[mask, ["customer_id", "amount", "status"]]
Règles pour les prédicats
- Placez chaque comparaison entre parenthèses lorsque vous les combinez avec
&,|ou~. - Utilisez
isinpour l'appartenance,betweenpour les intervalles fermés etisna/notnapour l'absence. - Utilisez
.str,.dtet.catpour les opérations typées sur chaînes, dates et catégories. - Vérifiez l'index d'un masque construit depuis un autre objet : l'alignement peut changer les lignes retenues.
recent = orders.loc[
orders["created_at"].ge("2026-01-01") & orders["created_at"].lt("2026-04-01")
]
missing_customer = orders.loc[orders["customer_id"].isna()]
query
DataFrame.query peut rendre lisibles de longues expressions analytiques :
threshold = 100
result = orders.query("amount >= @threshold and status == 'paid'")
Préférez les expressions booléennes ordinaires lorsque les noms de colonnes sont difficiles, les prédicats sont construits dynamiquement ou le débogage Python vaut mieux que la concision. Ne considérez jamais une chaîne de requête assemblée depuis une entrée non fiable comme une frontière de sécurité.
Filtrer ou sélectionner
Le filtrage choisit les lignes par prédicat. .loc peut choisir simultanément lignes et colonnes ;
.iloc choisit par position. Séparer ces idées évite beaucoup d'erreurs de forme et d'étiquette.
Vérifier les lignes retenues
Ici, large_orders a la forme (1, 3) et garde la ligne 0 ; result garde aussi cette ligne, avec les quatre colonnes. recent conserve les lignes 0 et 1. L’intervalle semi-ouvert inclut tout le 31 mars ; la borne "2026-03-31" désigne minuit et exclurait l’après-midi.
L’indexation booléenne traite les valeurs manquantes d’un masque booléen nullable comme fausses. N’utilisez mask.fillna(True) que pour conserver les prédicats inconnus. Python and/or ne combine pas les Series élément par élément ; utilisez &/|. Malgré son nom, DataFrame.filter sélectionne des étiquettes d’axe, pas des lignes selon leurs valeurs. query peut exécuter du code arbitraire : ne lui transmettez jamais d’expression non fiable.